<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>NeuZephyr: NeuZephyr::Nodes::Computation::ScalarMulNode Class Reference</title>
<link rel="icon" href="NZ_logo2.png" type="image/x-icon" />
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr id="projectrow">
  <td id="projectlogo"><img alt="Logo" src="NZ_logo2.png"/></td>
  <td id="projectalign">
   <div id="projectname">NeuZephyr
   </div>
   <div id="projectbrief">Simple DL Framework</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(0); });
/* @license-end */
</script>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
      <li><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
      <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
      <li><a href="inherits.html"><span>Class&#160;Hierarchy</span></a></li>
      <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
    </ul>
  </div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
/* @license-end */
</script>
<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><b>NeuZephyr</b></li><li class="navelem"><a class="el" href="namespace_neu_zephyr_1_1_nodes.html">Nodes</a></li><li class="navelem"><a class="el" href="namespace_neu_zephyr_1_1_nodes_1_1_computation.html">Computation</a></li><li class="navelem"><a class="el" href="class_neu_zephyr_1_1_nodes_1_1_computation_1_1_scalar_mul_node.html">ScalarMulNode</a></li>  </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
  <div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="class_neu_zephyr_1_1_nodes_1_1_computation_1_1_scalar_mul_node-members.html">List of all members</a>  </div>
  <div class="headertitle"><div class="title">NeuZephyr::Nodes::Computation::ScalarMulNode Class Reference</div></div>
</div><!--header-->
<div class="contents">

<p>Represents a scalar multiplication operation node in a computational graph.  
 <a href="#details">More...</a></p>
<div class="dynheader">
Inheritance diagram for NeuZephyr::Nodes::Computation::ScalarMulNode:</div>
<div class="dyncontent">
<div class="center"><img src="class_neu_zephyr_1_1_nodes_1_1_computation_1_1_scalar_mul_node__inherit__graph.png" border="0" usemap="#a_neu_zephyr_1_1_nodes_1_1_computation_1_1_scalar_mul_node_inherit__map" alt="Inheritance graph"/></div>
<map name="a_neu_zephyr_1_1_nodes_1_1_computation_1_1_scalar_mul_node_inherit__map" id="a_neu_zephyr_1_1_nodes_1_1_computation_1_1_scalar_mul_node_inherit__map">
<area shape="rect" title="Represents a scalar multiplication operation node in a computational graph." alt="" coords="5,80,219,123"/>
<area shape="rect" href="class_neu_zephyr_1_1_nodes_1_1_node.html" title="Base class for nodes in a neural network or computational graph." alt="" coords="27,5,197,32"/>
<area shape="poly" title=" " alt="" coords="115,48,115,80,109,80,109,48"/>
</map>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<div class="dynheader">
Collaboration diagram for NeuZephyr::Nodes::Computation::ScalarMulNode:</div>
<div class="dyncontent">
<div class="center"><img src="class_neu_zephyr_1_1_nodes_1_1_computation_1_1_scalar_mul_node__coll__graph.png" border="0" usemap="#a_neu_zephyr_1_1_nodes_1_1_computation_1_1_scalar_mul_node_coll__map" alt="Collaboration graph"/></div>
<map name="a_neu_zephyr_1_1_nodes_1_1_computation_1_1_scalar_mul_node_coll__map" id="a_neu_zephyr_1_1_nodes_1_1_computation_1_1_scalar_mul_node_coll__map">
<area shape="rect" title="Represents a scalar multiplication operation node in a computational graph." alt="" coords="5,80,219,123"/>
<area shape="rect" href="class_neu_zephyr_1_1_nodes_1_1_node.html" title="Base class for nodes in a neural network or computational graph." alt="" coords="27,5,197,32"/>
<area shape="poly" title=" " alt="" coords="115,48,115,80,109,80,109,48"/>
</map>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:aee5b00e84b10cdbe45584ce07f7dda31" id="r_aee5b00e84b10cdbe45584ce07f7dda31"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aee5b00e84b10cdbe45584ce07f7dda31">ScalarMulNode</a> (<a class="el" href="class_neu_zephyr_1_1_nodes_1_1_node.html">Node</a> *input, Tensor::value_type scalar)</td></tr>
<tr class="memdesc:aee5b00e84b10cdbe45584ce07f7dda31"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor to initialize a <code><a class="el" href="class_neu_zephyr_1_1_nodes_1_1_computation_1_1_scalar_mul_node.html" title="Represents a scalar multiplication operation node in a computational graph.">ScalarMulNode</a></code> for scalar multiplication.  <br /></td></tr>
<tr class="separator:aee5b00e84b10cdbe45584ce07f7dda31"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af2e2508ba6871149d21198c0c919f15a" id="r_af2e2508ba6871149d21198c0c919f15a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#af2e2508ba6871149d21198c0c919f15a">forward</a> () override</td></tr>
<tr class="memdesc:af2e2508ba6871149d21198c0c919f15a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Forward pass for the <code><a class="el" href="class_neu_zephyr_1_1_nodes_1_1_computation_1_1_scalar_mul_node.html" title="Represents a scalar multiplication operation node in a computational graph.">ScalarMulNode</a></code> to perform scalar multiplication.  <br /></td></tr>
<tr class="separator:af2e2508ba6871149d21198c0c919f15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af54aaa401041cced02874236b8a9cefd" id="r_af54aaa401041cced02874236b8a9cefd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#af54aaa401041cced02874236b8a9cefd">backward</a> () override</td></tr>
<tr class="memdesc:af54aaa401041cced02874236b8a9cefd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Backward pass for the <code><a class="el" href="class_neu_zephyr_1_1_nodes_1_1_computation_1_1_scalar_mul_node.html" title="Represents a scalar multiplication operation node in a computational graph.">ScalarMulNode</a></code> to propagate gradients.  <br /></td></tr>
<tr class="separator:af54aaa401041cced02874236b8a9cefd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_methods_class_neu_zephyr_1_1_nodes_1_1_node"><td colspan="2" onclick="javascript:dynsection.toggleInherit('pub_methods_class_neu_zephyr_1_1_nodes_1_1_node')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="class_neu_zephyr_1_1_nodes_1_1_node.html">NeuZephyr::Nodes::Node</a></td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Represents a scalar multiplication operation node in a computational graph. </p>
<p>The <code><a class="el" href="class_neu_zephyr_1_1_nodes_1_1_computation_1_1_scalar_mul_node.html" title="Represents a scalar multiplication operation node in a computational graph.">ScalarMulNode</a></code> class performs element-wise multiplication of a tensor by a scalar value. It is used in computational graphs to implement scalar scaling of tensors, which is common in various machine learning and numerical computing tasks.</p>
<p>Key features:</p><ul>
<li><b>Forward Pass</b>: Multiplies the input tensor's elements by a scalar value and stores the result in the <code>output</code> tensor.</li>
<li><b>Backward Pass</b>: Propagates gradients from the <code>output</code> tensor back to the input tensor by scaling the gradient with the scalar value.</li>
<li><b>Scalar Handling</b>: Handles scalar operations directly but issues a warning that scalar operations do not support saving to files, encouraging the use of matrix operations when persistence is required.</li>
</ul>
<p>This class is part of the <code><a class="el" href="namespace_neu_zephyr_1_1_nodes.html" title="Contains classes and functionality for nodes in a neural network or computational graph.">NeuZephyr::Nodes</a></code> namespace and is used for scalar-tensor operations in a computational graph.</p>
<dl class="section note"><dt>Note</dt><dd><ul>
<li>This node is designed for scalar-tensor operations. It does not support saving scalar operations to files; users should rely on matrix operations for this purpose.</li>
<li>The scalar value is stored internally and used for both the forward and backward passes.</li>
</ul>
</dd></dl>
<h3><a class="anchor" id="autotoc_md41"></a>
Usage Example:</h3>
<div class="fragment"><div class="line"><span class="comment">// Example: Using ScalarMulNode for scalar multiplication</span></div>
<div class="line">InputNode input({3, 3}, <span class="keyword">true</span>);  <span class="comment">// Create an input node with shape {3, 3}</span></div>
<div class="line">input.output-&gt;fill(2.0f);  <span class="comment">// Fill the input tensor with value 2.0</span></div>
<div class="line"> </div>
<div class="line"><a class="code hl_class" href="class_neu_zephyr_1_1_nodes_1_1_computation_1_1_scalar_mul_node.html">ScalarMulNode</a> scalar_mul_node(&amp;input, 5.0f);  <span class="comment">// Multiply the input tensor by 5.0</span></div>
<div class="line">scalar_mul_node.forward();  <span class="comment">// Perform the forward pass</span></div>
<div class="line">scalar_mul_node.backward();  <span class="comment">// Propagate gradients in the backward pass</span></div>
<div class="line"> </div>
<div class="line">std::cout &lt;&lt; <span class="stringliteral">&quot;Output: &quot;</span> &lt;&lt; *scalar_mul_node.output &lt;&lt; std::endl;  <span class="comment">// Print the result</span></div>
<div class="ttc" id="aclass_neu_zephyr_1_1_nodes_1_1_computation_1_1_scalar_mul_node_html"><div class="ttname"><a href="class_neu_zephyr_1_1_nodes_1_1_computation_1_1_scalar_mul_node.html">NeuZephyr::Nodes::Computation::ScalarMulNode</a></div><div class="ttdoc">Represents a scalar multiplication operation node in a computational graph.</div><div class="ttdef"><b>Definition</b> <a href="_nodes_8cuh_source.html#l00928">Nodes.cuh:928</a></div></div>
</div><!-- fragment --><dl class="section see"><dt>See also</dt><dd><a class="el" href="#af2e2508ba6871149d21198c0c919f15a" title="Forward pass for the ScalarMulNode to perform scalar multiplication.">forward()</a> for the <a class="el" href="#af2e2508ba6871149d21198c0c919f15a" title="Forward pass for the ScalarMulNode to perform scalar multiplication.">forward</a> pass computation method. </dd>
<dd>
<a class="el" href="#af54aaa401041cced02874236b8a9cefd" title="Backward pass for the ScalarMulNode to propagate gradients.">backward()</a> for the <a class="el" href="#af54aaa401041cced02874236b8a9cefd" title="Backward pass for the ScalarMulNode to propagate gradients.">backward</a> pass gradient propagation method.</dd></dl>
<dl class="section warning"><dt>Warning</dt><dd><ul>
<li>Scalar operations do not yet support saving to files.</li>
<li>Use matrix operations instead if model saving is required.</li>
</ul>
</dd></dl>
<dl class="section author"><dt>Author</dt><dd>Mgepahmge (<a href="https://github.com/Mgepahmge">https://github.com/Mgepahmge</a>)</dd></dl>
<dl class="section date"><dt>Date</dt><dd>2024/12/05 </dd></dl>

<p class="definition">Definition at line <a class="el" href="_nodes_8cuh_source.html#l00928">928</a> of file <a class="el" href="_nodes_8cuh_source.html">Nodes.cuh</a>.</p>
</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a id="aee5b00e84b10cdbe45584ce07f7dda31" name="aee5b00e84b10cdbe45584ce07f7dda31"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aee5b00e84b10cdbe45584ce07f7dda31">&#9670;&#160;</a></span>ScalarMulNode()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">NeuZephyr::Nodes::Computation::ScalarMulNode::ScalarMulNode </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="class_neu_zephyr_1_1_nodes_1_1_node.html">Node</a> *</td>          <td class="paramname"><span class="paramname"><em>input</em></span>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Tensor::value_type</td>          <td class="paramname"><span class="paramname"><em>scalar</em></span>&#160;)</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Constructor to initialize a <code><a class="el" href="class_neu_zephyr_1_1_nodes_1_1_computation_1_1_scalar_mul_node.html" title="Represents a scalar multiplication operation node in a computational graph.">ScalarMulNode</a></code> for scalar multiplication. </p>
<p>The constructor initializes a <code><a class="el" href="class_neu_zephyr_1_1_nodes_1_1_computation_1_1_scalar_mul_node.html" title="Represents a scalar multiplication operation node in a computational graph.">ScalarMulNode</a></code>, which performs element-wise multiplication of the output tensor of the input node by a scalar value. It sets up the node's input connections, determines the gradient tracking requirement, and prepares the output tensor with the appropriate shape and properties.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">input</td><td>A pointer to the input node. Its <code>output</code> tensor will be multiplied by the scalar value. </td></tr>
    <tr><td class="paramname">scalar</td><td>The scalar value to multiply with the input tensor.</td></tr>
  </table>
  </dd>
</dl>
<ul>
<li>The constructor connects the input node to this <code><a class="el" href="class_neu_zephyr_1_1_nodes_1_1_computation_1_1_scalar_mul_node.html" title="Represents a scalar multiplication operation node in a computational graph.">ScalarMulNode</a></code> by adding the input node to the <code>inputs</code> vector.</li>
<li>It initializes the <code>output</code> tensor with the same shape as the input tensor and determines whether the output tensor should track gradients based on the input tensor's gradient requirement.</li>
<li>A warning is issued to inform the user that scalar operations currently do not support saving to files, and matrix operations should be used for models requiring persistence.</li>
</ul>
<dl class="section note"><dt>Note</dt><dd><ul>
<li>The scalar value is stored internally in the <code><a class="el" href="class_neu_zephyr_1_1_nodes_1_1_computation_1_1_scalar_mul_node.html" title="Represents a scalar multiplication operation node in a computational graph.">ScalarMulNode</a></code> instance and used during the forward and backward passes.</li>
</ul>
</dd></dl>
<dl class="section warning"><dt>Warning</dt><dd><ul>
<li>Scalar operations are not yet supported for saving to files. Use matrix operations as an alternative.</li>
</ul>
</dd></dl>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="#af2e2508ba6871149d21198c0c919f15a" title="Forward pass for the ScalarMulNode to perform scalar multiplication.">forward()</a> for the <a class="el" href="#af2e2508ba6871149d21198c0c919f15a" title="Forward pass for the ScalarMulNode to perform scalar multiplication.">forward</a> pass implementation. </dd>
<dd>
<a class="el" href="#af54aaa401041cced02874236b8a9cefd" title="Backward pass for the ScalarMulNode to propagate gradients.">backward()</a> for the gradient propagation in the <a class="el" href="#af54aaa401041cced02874236b8a9cefd" title="Backward pass for the ScalarMulNode to propagate gradients.">backward</a> pass.</dd></dl>
<dl class="section author"><dt>Author</dt><dd>Mgepahmge (<a href="https://github.com/Mgepahmge">https://github.com/Mgepahmge</a>)</dd></dl>
<dl class="section date"><dt>Date</dt><dd>2024/12/05 </dd></dl>

<p class="definition">Definition at line <a class="el" href="_nodes_8cu_source.html#l00137">137</a> of file <a class="el" href="_nodes_8cu_source.html">Nodes.cu</a>.</p>

</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="af54aaa401041cced02874236b8a9cefd" name="af54aaa401041cced02874236b8a9cefd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af54aaa401041cced02874236b8a9cefd">&#9670;&#160;</a></span>backward()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void NeuZephyr::Nodes::Computation::ScalarMulNode::backward </td>
          <td>(</td>
          <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Backward pass for the <code><a class="el" href="class_neu_zephyr_1_1_nodes_1_1_computation_1_1_scalar_mul_node.html" title="Represents a scalar multiplication operation node in a computational graph.">ScalarMulNode</a></code> to propagate gradients. </p>
<p>The <code><a class="el" href="#af54aaa401041cced02874236b8a9cefd" title="Backward pass for the ScalarMulNode to propagate gradients.">backward()</a></code> method computes the gradient of the loss with respect to the input tensor by scaling the gradient of the output tensor using the scalar value. This operation ensures that the gradients are correctly propagated back through the computational graph.</p>
<ul>
<li>The method checks if the input tensor requires gradients. If not, no computation is performed.</li>
<li>A CUDA kernel (<code>ScalarMul</code>) is launched to scale the gradient of the output tensor and accumulate the result in the gradient of the input tensor.</li>
<li>The grid and block dimensions are calculated based on the size of the output tensor to ensure efficient GPU parallelization.</li>
</ul>
<dl class="section note"><dt>Note</dt><dd><ul>
<li>The gradient computation is performed as <code>grad_input[i] = grad_output[i] * scalar</code> for each element in the tensor, where <code>grad_output</code> is the gradient of the <code>output</code> tensor.</li>
</ul>
</dd></dl>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="#af2e2508ba6871149d21198c0c919f15a" title="Forward pass for the ScalarMulNode to perform scalar multiplication.">forward()</a> for the scalar multiplication computation in the <a class="el" href="#af2e2508ba6871149d21198c0c919f15a" title="Forward pass for the ScalarMulNode to perform scalar multiplication.">forward</a> pass.</dd></dl>
<dl class="section author"><dt>Author</dt><dd>Mgepahmge (<a href="https://github.com/Mgepahmge">https://github.com/Mgepahmge</a>)</dd></dl>
<dl class="section date"><dt>Date</dt><dd>2024/12/05 </dd></dl>

<p>Implements <a class="el" href="class_neu_zephyr_1_1_nodes_1_1_node.html#a41914155871c84330701f9d1649b39f3">NeuZephyr::Nodes::Node</a>.</p>

<p class="definition">Definition at line <a class="el" href="_nodes_8cu_source.html#l00153">153</a> of file <a class="el" href="_nodes_8cu_source.html">Nodes.cu</a>.</p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><img src="class_neu_zephyr_1_1_nodes_1_1_computation_1_1_scalar_mul_node_af54aaa401041cced02874236b8a9cefd_cgraph.png" border="0" usemap="#aclass_neu_zephyr_1_1_nodes_1_1_computation_1_1_scalar_mul_node_af54aaa401041cced02874236b8a9cefd_cgraph" alt=""/></div>
<map name="aclass_neu_zephyr_1_1_nodes_1_1_computation_1_1_scalar_mul_node_af54aaa401041cced02874236b8a9cefd_cgraph" id="aclass_neu_zephyr_1_1_nodes_1_1_computation_1_1_scalar_mul_node_af54aaa401041cced02874236b8a9cefd_cgraph">
<area shape="rect" title="Backward pass for the ScalarMulNode to propagate gradients." alt="" coords="5,5,219,48"/>
<area shape="rect" href="namespace_neu_zephyr_1_1_kernels.html#aed9c4b4569969fff2d761183c0b4af9f" title="Kernel function to perform scalar multiplication on the GPU." alt="" coords="267,5,404,48"/>
<area shape="poly" title=" " alt="" coords="219,24,251,24,251,29,219,29"/>
</map>
</div>

</div>
</div>
<a id="af2e2508ba6871149d21198c0c919f15a" name="af2e2508ba6871149d21198c0c919f15a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af2e2508ba6871149d21198c0c919f15a">&#9670;&#160;</a></span>forward()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void NeuZephyr::Nodes::Computation::ScalarMulNode::forward </td>
          <td>(</td>
          <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Forward pass for the <code><a class="el" href="class_neu_zephyr_1_1_nodes_1_1_computation_1_1_scalar_mul_node.html" title="Represents a scalar multiplication operation node in a computational graph.">ScalarMulNode</a></code> to perform scalar multiplication. </p>
<p>The <code><a class="el" href="#af2e2508ba6871149d21198c0c919f15a" title="Forward pass for the ScalarMulNode to perform scalar multiplication.">forward()</a></code> method computes the element-wise multiplication of the input tensor by the scalar value. It uses CUDA kernels to perform the computation in parallel on the GPU, ensuring efficient execution.</p>
<ul>
<li>The method launches a CUDA kernel (<code>ScalarMul</code>) to compute the scalar multiplication.</li>
<li>The output tensor is populated with the results of the multiplication.</li>
<li>The grid and block dimensions are calculated based on the size of the output tensor to optimize GPU performance.</li>
</ul>
<dl class="section note"><dt>Note</dt><dd><ul>
<li>The scalar multiplication is performed as <code>output[i] = input[i] * scalar</code> for each element in the tensor.</li>
</ul>
</dd></dl>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="#af54aaa401041cced02874236b8a9cefd" title="Backward pass for the ScalarMulNode to propagate gradients.">backward()</a> for gradient propagation in the <a class="el" href="#af54aaa401041cced02874236b8a9cefd" title="Backward pass for the ScalarMulNode to propagate gradients.">backward</a> pass.</dd></dl>
<dl class="section author"><dt>Author</dt><dd>Mgepahmge (<a href="https://github.com/Mgepahmge">https://github.com/Mgepahmge</a>)</dd></dl>
<dl class="section date"><dt>Date</dt><dd>2024/12/05 </dd></dl>

<p>Implements <a class="el" href="class_neu_zephyr_1_1_nodes_1_1_node.html#a64e42ba40199e35bfe453ef14b2d15c0">NeuZephyr::Nodes::Node</a>.</p>

<p class="definition">Definition at line <a class="el" href="_nodes_8cu_source.html#l00147">147</a> of file <a class="el" href="_nodes_8cu_source.html">Nodes.cu</a>.</p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><img src="class_neu_zephyr_1_1_nodes_1_1_computation_1_1_scalar_mul_node_af2e2508ba6871149d21198c0c919f15a_cgraph.png" border="0" usemap="#aclass_neu_zephyr_1_1_nodes_1_1_computation_1_1_scalar_mul_node_af2e2508ba6871149d21198c0c919f15a_cgraph" alt=""/></div>
<map name="aclass_neu_zephyr_1_1_nodes_1_1_computation_1_1_scalar_mul_node_af2e2508ba6871149d21198c0c919f15a_cgraph" id="aclass_neu_zephyr_1_1_nodes_1_1_computation_1_1_scalar_mul_node_af2e2508ba6871149d21198c0c919f15a_cgraph">
<area shape="rect" title="Forward pass for the ScalarMulNode to perform scalar multiplication." alt="" coords="5,5,219,48"/>
<area shape="rect" href="namespace_neu_zephyr_1_1_kernels.html#aed9c4b4569969fff2d761183c0b4af9f" title="Kernel function to perform scalar multiplication on the GPU." alt="" coords="267,5,404,48"/>
<area shape="poly" title=" " alt="" coords="219,24,251,24,251,29,219,29"/>
</map>
</div>

</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<li>D:/C Program/Simple-CPP-DL-Framework/include/NeuZephyr/<a class="el" href="_nodes_8cuh_source.html">Nodes.cuh</a></li>
<li>D:/C Program/Simple-CPP-DL-Framework/src/<a class="el" href="_nodes_8cu_source.html">Nodes.cu</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0
</small></address>
</div><!-- doc-content -->
</body>
</html>
